package java.lang;

/**
 * 我们创建一个自定义String类，但是在加载自定义String类的时候会率先使用引导类加载器加载，
 * 而引导类加载器在加载的过程中会先加载jdk自带的文件（rt.jar包中java\lang\String.class），
 * 报错信息说没有main方法，就是因为加载的是rt.jar包中的String类。这样可以保证对java核心源代码的保护，
 * 这就是沙箱安全机制。
 */

public class String {
    //双亲委派机制:全安
    //APP-->EXT-->BOOT(最终执行)
    //-->如果BOOT没有-->EXT-->APP
    //-->如果都没有，报ClassNotFoundException
    @Override
    public String toString(){
        return "Hello";
    }

    public static void main(String[] args) {
        String s = new String();
        System.out.println(s.getClass().getClassLoader());
        System.out.println(s.toString());
        /*
        1．类加载器收到类加载的请求 AppClassLoader
        2．将这个请求向上委托给父类加载器去完成，一直向上委托，直到启动类加载器BootstrapClassLoader
        3．启动加载器检查是否能够加载当前这个类，能加载就结束，使用当前的加载器，否则，抛出异常，通知子加载器进行加载
        4.重复步檠3
        * */
    }
}
